/*
 * ApproxCliqueLifter.h
 *
 *  Created on: Jan 24, 2014
 *      Author: ik
 */

#ifndef APPROXCLIQUELIFTER_H_
#define APPROXCLIQUELIFTER_H_

#include <CliqueLifter.h>
#include <SeparatorParameters.h>
#include <ProjectableVertexSet.h>

using namespace std;

class ApproxCliqueLifter : public CliqueLifter
{
	int				_alpha;
	VertexSet&		_vertices;
	Lista&			_enumerables;
	ProjectableCliqueSet&	_RR;
	VertexSet& 		_R;

	const SeparatorParameters&	_parametros;

	IntValueArray&	_pesosPD;
	VertexSet&		_verticesPD;

	int greedyCovering(VertexSet& R, const IntValueArray& pesos, int lim);
	int greedyPrimalDual(const VertexSet& R, const IntValueArray& pesos, int alpha, int lim);
	int calculaLambda(const VertexSet& soporte, const IntValueArray& coeficientes, VertexSet& proyectada, int pi);

public:
	ApproxCliqueLifter(Grafo &grafo, Cliquer &cliquer, const SeparatorParameters& par);
	virtual ~ApproxCliqueLifter();
};

#endif /* APPROXCLIQUELIFTER_H_ */
